前兩天我們看了兩個很完整的系統。
Day 25 的 Claude Code 告訴我們:
一個 Model 要安全地修改真實 Repository,需要完整的 Tool、Permission、Context、Hook 與 Verification Harness。
Day 26 的 Hermes 告訴我們:
一個 Agent 要跨 Session 長期存在,需要 Memory、Skills、Scheduling、Channels 與 Event Routing。
今天故意走到另一個極端。
如果我們把很多東西拿掉:
只留下:
Model
+
Loop
+
Bash
+
Environment
+
Budget
+
Submission / Evaluation
這樣還算 Agent 嗎?
答案是:
可以。
這就是 mini-swe-agent 最值得看的地方。
Awesome Agent Architecture 研究的版本固定在 v2.4.5,把它當成一個約 150 行、單一 Bash Tool 的研究基線,用來觀察:
哪些 Harness Layer 是真正必要的,哪些只是為了解決更複雜的產品 Failure Mode 才加入?
前 26 天,我們一直在加東西。
很容易形成一個錯覺:
更多 Tool
+
更多 Planner
+
更多 Subagent
+
更多 Memory
+
更多 Graph
=
更強 Agent
但 mini-swe-agent 提醒我們:
如果 Model 本身已經有很強的 Software Engineering 能力,Harness 有時候可以非常小。
真正值得問的不是:
還能加什麼功能?
而是:
少掉這個 Mechanism,哪一個可觀察 Failure 會增加?
如果答不出來,可能根本不需要加。
mini-swe-agent 的核心可以概念化成:
Task
↓
Model
↓
Action
↓
Bash
↓
Observation
↓
Model
↓
...
↓
Submit
它仍然有 Agent 最基本的閉環:
Reason
↓
Act
↓
Observe
↓
Reason
這再次證明:
Agent 的最小核心不是 Framework。
而是:
Model 能把 Observation 轉成下一個 Action,而且 Harness 能真的執行 Action。
很多 Agent Framework 會建立:
read_file
write_file
search_files
run_tests
git_diff
install_package
mini-swe-agent 的思路更激進:
Shell 本身已經是一個通用 Computer Interface。
模型可以用:
sed
grep
find
python
pytest
git
cat
完成大量工作。
這有一個很大的優點:
Harness 不需要替每一個 Action 都設計新的 Tool。
新增 Capability 的成本很低。
Model 只需要學會如何使用現成 Unix Environment。
這個設計不是沒有代價。
如果只有 Bash:
Harness 不會幫你明確區分:
Read File
vs
Delete File
vs
Run Test
vs
Modify Repo
大量語意都落到 Model。
也就是:
Rich Harness
把更多責任放在 Code
Minimal Harness
把更多責任放在 Model
這是一個非常重要的 Trade-off。
mini-swe-agent 不是證明:
Tool Runtime 不重要。
而是證明:
Tool Runtime 可以薄到只剩一個通用入口,只要 Domain 和 Risk 允許。
如果每個 Tool 都需要 Schema:
read_file(path)
write_file(path, content)
search(query, scope)
模型每一輪都要看到大量 Tool Description。
Bash-only 的 Tool Surface 很小。
這會降低:
代價則是:
所以這不是免費的簡化。
是把 Complexity 從 Harness 移到 Model 和 Environment。
mini-swe-agent 一個很值得看的設計是:
不需要維持一個複雜的 Stateful Shell Session。
每次 Action 可以獨立透過 subprocess 執行。
這降低很多 Harness Complexity:
但它也代表:
需要長期 Shell State 的行為要透過 Filesystem 或 Command 自己保存。
這就是 Minimalism 的典型取捨。
只有一個 Bash Tool,看起來 Agent 能力很少。
其實真正 Capability 來自 Environment 裡有哪些程式。
例如:
git
python
pytest
node
compiler
package manager
所以完整架構其實是:
Model
↓
Bash
↓
Environment
不是:
Model
↓
One Tiny Tool
Bash 只是通往 Environment 的 Gateway。
這提醒我們:
Tool Count 不是 Capability Count。
一個通用 Tool 可能比二十個專用 Tool 更有能力。
長 Session 最常見策略是:
Context 快滿
↓
Summary
↓
繼續
mini-swe-agent 走得更簡單。
它假設:
Run 應該在 Budget 內結束,不需要把一個 Session 無限延長。
所以它可以不用完整 Compaction System。
對 Tool Observation 則採取簡單截斷策略,例如只保留有限大小的輸出,避免一個 Command 直接塞爆 Context。
這個設計非常值得注意:
不是每個 Agent 都需要解決「永遠活下去」的問題。
如果你的 Task 本來就應該:
在有限 Budget 內完成或失敗
那 Hard Budget 可能比複雜 Context Compaction 更合理。
當 Harness 很薄時,最重要的控制反而更清楚:
你可以自由探索
但不能無限探索
所以 Step Budget、Cost Budget 變成核心。
概念上:
for step in range(max_steps):
action = model(...)
observation = env.execute(action)
fail("budget exhausted")
這就是 Day 23 的原則:
Budget before start.
Model 可以自由決定每一步。
但 Harness 決定它有多少步。
比較完整的 Agent 會說:
Context 快滿了,我要 Compact。
mini-swe-agent 的回答比較接近:
如果你跑到 Context 快滿,可能這次 Run 本來就應該結束。
這不是永遠正確。
但對 SWE-bench 這類 bounded task 很合理。
也就是:
Long-lived Assistant
需要 Context Survival
Bounded Benchmark Agent
可能只需要 Run Budget
Architecture 必須和 Task Horizon 配對。
如果 Agent 只要輸出一句:
Done.
Runner 怎麼知道它真的要結束?
mini-swe-agent 類系統會有一個明確 Submission / Completion Protocol。
也就是模型不是只用自然語言表示:
我覺得完成。
而是執行一個被 Harness 認得的完成 Action。
概念上:
Agent Work
↓
submit
↓
Runner stops
↓
External Evaluation
這和 Day 18 Protocols 的概念一樣。
submit 只代表:
Agent 決定不再工作。
它不代表:
Patch 是正確的。
真正 Correctness 由外部 Evaluation 決定。
例如:
Agent
↓
Patch
↓
Submit
↓
SWE-bench / tests
↓
Pass or Fail
這是一個非常乾淨的 Responsibility Split:
Model
決定:
我要交卷
Harness
決定:
停止 Run
Evaluator
決定:
你答對了嗎
這和 Day 22 的 Evaluation 直接接起來。
完整 Product Agent 很難比較。
因為一次修改可能同時改變:
mini-swe-agent 的優勢是變數少。
所以更適合問:
同一 Harness
換 Model
差多少?
同一 Model
改 Prompt
差多少?
增加一個 Mechanism
值不值得?
這就是 Research Baseline 的價值。
假設一個 30 萬行 Harness 成功率上升 5%。
很難知道是哪一層造成。
如果 Agent Core 只有約 150 行:
行為更容易追。
這也是為什麼極簡系統很適合:
它不是一定比較適合所有 Production Product。
但它非常適合回答:
真正最低限度需要什麼?
它沒有大量 Context Rescue Mechanism。
所以一個長 Tool Output、長 History 很容易直接撞限制。
這聽起來是缺點。
但它同時有一個研究上的優點:
Failure 很透明。
你不需要先 Debug:
因為這些 Layer 根本不存在。
Minimal Harness 的優點之一就是:
Failure Attribution 清楚。
A3 對 mini-swe-agent Harness Thesis 的整理仍然保留一個很重要的控制概念:
one loop
one bash tool
confirm gate
step and cost budgets
這件事很有意思。
即使一個 Agent 極端追求簡單,還是不能完全沒有:
這些是 Harness 最接近「不可刪」的部分。
| Claude Code | mini-swe-agent | |
|---|---|---|
| Tool Surface | 多個結構化能力 | 幾乎只有 Bash |
| Permission | 細緻 Harness Policy | 非常薄 |
| Context | 長 Session 管理 | 依賴 Budget + Output Truncation |
| Subagent | 有 | 不需要 |
| Skills | 有 | 不需要 |
| Product Goal | General coding workflow | Minimal SWE agent / benchmark |
| Harness Size | 大 | 約 150 行 Agent Core |
| 核心哲學 | Control real-world complexity | Remove everything until necessary |
兩個系統不是誰比較正確。
它們在解不同問題。
Hermes 需要:
Memory
Skills
Channels
Cron
Persistent Session
因為它要跨時間存在。
mini-swe-agent 的一個 Run 是:
Task
↓
Work
↓
Submit
↓
Grade
↓
End
它不需要記住你下週回來會做什麼。
所以沒有理由加入大量 Long-term State。
這就是:
Task Horizon 決定 Harness Depth。
如果 Model 很弱,Harness 可能需要:
Model 變強後,有些 Layer 可能反而限制它。
所以 Harness 不應該永遠只加不減。
每次 Model Upgrade,都應該重新問:
這個 Layer 現在還有 measurable value 嗎?
如果沒有:
刪掉。
這也是 A3 Harness Thesis 很重要的一部分。
mini-swe-agent 最值得學的不是:
怎麼用 150 行做出 Claude Code?
它真正提出的是一個更重要的工程問題:
這個 Harness Mechanism 到底是在解真實 Failure,還是只是因為 Framework 可以加,所以我們就加了?
Claude Code 告訴我們完整 Harness 長什麼樣。
Hermes 告訴我們 Long-term Agent 需要什麼。
mini-swe-agent 則提醒我們:
Harness 的最終目標不是變大,而是保留最少、但足以讓 Agent 可靠工作的控制。
下一篇,我們會看第四種完全不同的答案。
如果不是把 Agent 做成一個固定 Class,也不是把所有功能寫進同一個 Runtime,而是:
連 Agent Loop 本身都只是一個可以 Mount / Unmount 的 Plugin。
那架構會變成什麼?
Day 28:DeepSeek Harness。
完整系列與程式碼範例收錄於 https://github.com/hardness1020/awesome-agent-architecture